package com.nofeng.wx.third;
import com.google.common.collect.Lists;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.draft.*;
import me.chanjar.weixin.mp.bean.material.WxMpMaterialNewsBatchGetResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class WxMpApi{

    @Autowired
    private WxMpService wxMpService;


    /**
     * 创建新草稿
     *
     * @param title   文章标题
     * @param content 文章HTML内容（注意替换图片URL为微信可访问的URL）
     * @param author  作者（可选）
     * @return 草稿的 media_id
     * @throws WxErrorException
     */
    public String createDraft(String title, String digest,String thumbMediaId,String content, String author) throws WxErrorException {
        // 1. 构建草稿文章
        WxMpDraftArticles draftArticles = new WxMpDraftArticles();
        draftArticles.setTitle(title);
        draftArticles.setContent(content);
        draftArticles.setAuthor(author);
        // 可设置其他属性，如摘要、缩略图mediaId、是否显示封面等
         draftArticles.setDigest(digest);
        draftArticles.setThumbMediaId(thumbMediaId);
         draftArticles.setShowCoverPic(1);
        draftArticles.setNeedOpenComment(1);

        // 2. 构建添加草稿请求
        WxMpAddDraft draft = new WxMpAddDraft();
        draft.setArticles(Lists.newArrayList(draftArticles)); // 单篇文章草稿

        // 3. 调用接口创建草稿
        return wxMpService.getDraftService().addDraft(draft);
    }

    /**
     * 获取草稿
     *
     * @param mediaId 草稿的media_id
     * @return 草稿详情
     * @throws WxErrorException
     */
    public WxMpDraftInfo getDraft(String mediaId) throws WxErrorException {
        return wxMpService.getDraftService().getDraft(mediaId);
    }

    /**
     * 修改草稿
     *
     * @param mediaId 要修改的草稿的media_id
     * @param title   新的文章标题（如不需修改可传null）
     * @param content 新的文章内容（如不需修改可传null）
     * @param author  新的作者（如不需修改可传null）
     * @throws WxErrorException
     */
    public void updateDraft(String mediaId, String title, String content, String author) throws WxErrorException {
        // 1. 先获取现有草稿
        WxMpDraftInfo existingDraft = wxMpService.getDraftService().getDraft(mediaId);
        if (existingDraft == null || existingDraft.getNewsItem().isEmpty()) {
            throw new RuntimeException("草稿不存在或无文章内容");
        }

        // 2. 假设只修改第一篇文章（图文草稿可包含多篇文章）
        WxMpDraftArticles articleToUpdate = existingDraft.getNewsItem().get(0);
        if (title != null) {
            articleToUpdate.setTitle(title);
        }
        if (content != null) {
            articleToUpdate.setContent(content);
        }
        if (author != null) {
            articleToUpdate.setAuthor(author);
        }

        // 3. 构建更新请求
        WxMpUpdateDraft updateDraft = new WxMpUpdateDraft();
        updateDraft.setMediaId(mediaId);
        updateDraft.setIndex(0); // 更新第一篇文章
        updateDraft.setArticles(articleToUpdate);

        // 4. 调用接口更新草稿
        wxMpService.getDraftService().updateDraft(updateDraft);
    }

    /**
     * 发布草稿
     *
     * @param mediaId 草稿的media_id
     * @return 发布结果
     * @throws WxErrorException
     */
    public String publishDraft(String mediaId) throws WxErrorException {
        // 可直接发布，也可根据需要选择发布时间等更多选项
        return wxMpService.getFreePublishService().submit(mediaId);
    }

    /**
     * 删除草稿
     *
     * @param mediaId 草稿的media_id
     * @throws WxErrorException
     */
    public void deleteDraft(String mediaId) throws WxErrorException {
        wxMpService.getDraftService().delDraft(mediaId);
    }

    public WxMpMaterialNewsBatchGetResult getPicture() throws WxErrorException {
        return wxMpService.getMaterialService().materialNewsBatchGet(0,50);
    }
}
